این جلسه یکی از مباحث مهم در LPIC (بخش ۱۰۶) است. تفاوت ASCII، ISO-8859، Unicode و UTF را حتماً حفظ کنید.
🌍 قبل از شروع، یه مثال ساده:
فرض کن میخوای به یه خارجی پیام بدی. باید به زبونی که میفهمه براش بنویسی. توی دنیای کامپیوتر هم همینطوره! سیستمها با صفر و یک کار میکنن، اما برای اینکه با ما انسانها ارتباط برقرار کنن، باید زبان ما رو بلد باشن. اینجاست که Character Sets و Localization وارد ماجرا میشن!
▍ Localization چیست؟
Localization (بومیسازی) به معنی سازگار کردن سیستم با زبان، فرهنگ و قوانین یک منطقه خاص است. این شامل موارد زیر میشود:
- زبان: فارسی، انگلیسی، عربی و ...
- ساختار عددی: جداکننده هزارگان (مثلاً ۱,۰۰۰ در انگلیسی و ۱٬۰۰۰ در فارسی)
- واحد پولی: ریال، دلار، یورو و ...
- قالب تاریخ و زمان: ۱۴۰۵/۰۶/۰۱ در ایران و 2026-08-23 در آمریکا
- جهت نوشتار: راستبهچپ (RTL) مثل فارسی و چپبهراست (LTR) مثل انگلیسی
🔑 اصل مهم: هر سیستم با صفر و یک کار میکند. اما برای تعامل با انسانها، باید با زبان آنها صحبت کند. اینجاست که Character Sets وارد ساختار میشوند.
▍ Character Sets (مجموعه کاراکترها)
Character Set یک سری کدهای استاندارد است که برای تفسیر و نمایش کاراکترهای هر زبانی استفاده میشود. در طول تاریخ، چهار دسته اصلی از Character Sets شکل گرفتهاند:
🔴 ASCII
- ساختار: ۷ بیت (در عمل ۱ بایت = ۸ بیت).
- کاراکترها: فقط ۱۲۸ کاراکتر (حروف a-z, A-Z, اعداد ۰-۹، علائم پایه).
- مزیت: ساده، سریع، پایهی بسیاری از سیستمها.
- محدودیت: فقط زبان انگلیسی؛ هیچ پشتیبانی از زبانهای دیگر مثل فارسی یا عربی.
🟠 ISO-8859
- ساختار: ۸ بیت (۲۵۶ کاراکتر).
- خانواده: چندین نسخه برای زبانهای مختلف:
- ISO-8859-1 → لاتین غربی (انگلیسی، فرانسوی، آلمانی)
- ISO-8859-5 → سیریلیک (روسی)
- ISO-8859-6 → عربی
- ISO-8859-9 → ترکی
- مزیت: پوشش زبانهای اروپایی و برخی زبانهای دیگر.
- معایب: ناسازگاری بین نسخهها؛ پشتیبانی محدود از زبانهای غیراروپایی.
🔵 Unicode
- ساختار: استاندارد جهانی برای همه زبانها و نمادها.
- پوشش: بیش از ۱۴۹,۰۰۰ کاراکتر شامل زبانها، نمادها، ریاضی، ایموجی.
- مزیت: یک استاندارد واحد برای همه زبانها؛ پایان مشکل ناسازگاری.
- محدودیت: نیاز به روشهای رمزگذاری برای ذخیرهسازی و انتقال (UTF).
ترتیب تاریخی: ASCII → ISO-8859 → Unicode (UTF)
Unicode یک استاندارد است، در حالی که UTF روش پیادهسازی آن است.
▍ انواع UTF (روشهای رمزگذاری Unicode)
هدف UTF: تبدیل کدپوینتهای Unicode به بایتها (برای ذخیرهسازی و انتقال).
| نوع UTF |
توضیح |
کاربرد |
| UTF-8 |
متغیر طول (۱ تا ۴ بایت). سازگار با ASCII. پرکاربردترین در لینوکس و وب. |
✅ لینوکس، وب (HTML)، اکثر برنامههای مدرن |
| UTF-16 |
متغیر طول (۲ یا ۴ بایت). رایج در ویندوز و جاوا. |
✅ ویندوز، جاوا، سیشارپ |
| UTF-32 |
ثابت طول (۴ بایت). ساده برای پردازش، ولی پرمصرف در حافظه. |
✅ برنامههایی که نیاز به پردازش سریع دارند (کمتر استفاده میشود). |
UTF-8 در لینوکس و وب پیشفرض است و با ASCII سازگاری کامل دارد.
▍ مدیریت Localization در لینوکس
• دستور locale
این دستور تنظیمات فعلی Localization را نمایش میدهد.
┌──(ya3in㉿kali)-[~]
└─$ locale
LANG=en_US.UTF-8
LANGUAGE=en_US
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
توضیح: این خروجی نشان میدهد که تنظیمات زبان به en_US.UTF-8 (انگلیسی آمریکا با UTF-8) تنظیم شده است.
• دستور locale -ck
این دستور اطلاعات کاملتری درباره یک دسته خاص از تنظیمات محلی نمایش میدهد.
┌──(ya3in㉿kali)-[~]
└─$ locale -ck LC_TIME
توضیح: نمایش تنظیمات مربوط به قالب تاریخ و زمان.
برای دیدن لیست تمام زبانهای پشتیبانیشده در سیستم از دستور locale -a استفاده کنید.
▍ تغییر Localization
• روش ۱: با استفاده از متغیرهای محیطی
┌──(ya3in㉿kali)-[~]
└─$ export LANG=fa_IR.UTF-8
توضیح: این دستور زبان سیستم را به فارسی ایران با UTF-8 تغییر میدهد (فقط برای جلسه فعلی).
• روش ۲: با دستور localectl (دائمی)
┌──(ya3in㉿kali)-[~]
└─$ localectl set-locale LANG=fa_IR.UTF-8
توضیح: این دستور زبان سیستم را بهطور دائمی (برای همه جلسات) تغییر میدهد.
فرق export و localectl: export موقتی است و فقط برای جلسه فعلی، اما localectl دائمی است و در ریبوت نیز باقی میماند.
▍ جدول خلاصه Character Sets
| Character Set |
اندازه (بیت) |
تعداد کاراکتر |
پوشش زبان |
مزیت |
محدودیت |
| ASCII |
۷ |
۱۲۸ |
فقط انگلیسی |
ساده و سریع |
فقط انگلیسی |
| ISO-8859 |
۸ |
۲۵۶ |
زبانهای اروپایی |
پوشش چند زبان |
ناسازگاری بین نسخهها |
| Unicode |
- |
۱۴۹,۰۰۰+ |
همه زبانها |
استاندارد جهانی |
نیاز به رمزگذاری (UTF) |
| UTF-8 |
۸-۳۲ |
همه Unicode |
همه زبانها |
سازگار با ASCII، محبوب |
متغیر طول (پیچیدگی) |
✅ جمعبندی نهایی برای امتحان:
- Localization: سازگاری سیستم با زبان، فرهنگ و قوانین منطقه.
- ASCII: ۷ بیت، فقط ۱۲۸ کاراکتر، فقط انگلیسی.
- ISO-8859: ۸ بیت، ۲۵۶ کاراکتر، زبانهای اروپایی.
- Unicode: استاندارد جهانی، بیش از ۱۴۹,۰۰۰ کاراکتر.
- UTF-8: رمزگذاری Unicode (۱-۴ بایت)، سازگار با ASCII، پیشفرض لینوکس و وب.
- دستورات:
locale (مشاهده)، localectl (تغییر دائمی)، export LANG= (تغییر موقتی).